import {getToken,setToken,removeToken} from '@/utils/auth'
//导入接口
import { login,getuser } from '@/api/user' 
//导入静态路由
import{constantRoutes}from '@/router'
//导入重置路由
import {resetRouter} from '@/router'
//声明共享的数据
const state ={
  token:getToken(),//从缓存中获取token
  userinfo:{},//用户信息
  perrouter:[],//用户可以访问路由地址
}

//修改数据的方法
const mutations={
  settoken(state,val){
    state.token = val
    //token同步到缓存中
    setToken(val)
  },
  //删除token
  removeTokens(state){
    //先将数据清空
    state.token = null
    //删除缓存中的token
    removeToken()
  },
  setuserinfo(state,val){
        state.userinfo = val
  },
  deluserinfo(state){
    state.userinfo = {}
  },
  //配置路由
  setperrouter(state,newrouter){
    state.perrouter=[...constantRoutes,...newrouter]//用户的可以访问的路由是 静态路由 +动态路由
  }
}

const actions={
  //login函数返回的promise对象是否成功是根据login接口函数返回的promise是否成功
 async login(context,data){
   //data获取用户登录的数据
   //发送请求调用登录接口
  const token = await  login(data)
   //获取数据里的token保存到state中
    context.commit('settoken',token)
  },
  //获取用户信息
 async getuserinfo(context){
  const res =  await getuser() 
  context.commit('setuserinfo',res)
  //返回获取的user数据  为以后分配路由时能够获取到用户的权限
  return res
  },
  //退出登录
  logout(context){
    resetRouter()//重置路由
    context.commit('deluserinfo')//删除用户信息 将用户信息设置成空
    context.commit('removeTokens')//删除token
  }
}
export default{
  namespaced:true,//开启命名空间
  state,
  mutations,
  actions
}